/**
 * Cookie工具函数
 * 提供设置、获取和删除cookie的功能
 */

/**
 * 设置cookie
 * @param {string} name - cookie名称
 * @param {string} value - cookie值
 * @param {number} days - 过期天数
 * @param {string} path - cookie路径，默认为'/'
 * @param {object} options - 其他选项
 */
function setCookie(name, value, days = 7, path = '/', options = {}) {
    let expires = '';
    if (days) {
        const date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = '; expires=' + date.toUTCString();
    }
    
    let cookieString = name + '=' + encodeURIComponent(value) + expires + '; path=' + path;
    
    // 添加其他选项
    if (options.domain) {
        cookieString += '; domain=' + options.domain;
    }
    if (options.secure) {
        cookieString += '; secure';
    }
    if (options.sameSite) {
        cookieString += '; samesite=' + options.sameSite;
    }
    
    document.cookie = cookieString;
}

/**
 * 获取cookie
 * @param {string} name - cookie名称
 * @returns {string|null} - cookie值，如果不存在则返回null
 */
function getCookie(name) {
    const nameEQ = name + '=';
    const ca = document.cookie.split(';');
    for(let i = 0; i < ca.length; i++) {
        let c = ca[i];
        while (c.charAt(0) === ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length, c.length));
    }
    return null;
}

/**
 * 删除cookie
 * @param {string} name - cookie名称
 * @param {string} path - cookie路径，默认为'/'
 */
function deleteCookie(name, path = '/') {
    document.cookie = name + '=; Max-Age=-99999999; path=' + path;
}

/**
 * 保存认证令牌到cookie
 * @param {string} token - 认证令牌
 * @param {number} days - 过期天数，默认为7天
 */
function saveAuthToken(token, days = 7) {
    setCookie('auth_token', token, days, '/', {
        // 根据需要添加其他选项
        sameSite: 'lax'
    });
}

/**
 * 从cookie中获取认证令牌
 * @returns {string|null} - 认证令牌，如果不存在则返回null
 */
function getAuthToken() {
    return getCookie('auth_token');
}

/**
 * 从cookie中删除认证令牌
 */
function removeAuthToken() {
    deleteCookie('auth_token', '/');
}

// 将函数挂载到全局window对象上，使其可以被其他脚本访问
window.utils = window.utils || {};
window.utils.cookie = {
    setCookie,
    getCookie,
    deleteCookie,
    saveAuthToken,
    getAuthToken,
    removeAuthToken
};